Métodos Avanzados en Aprendizaje Automático
Práctica 3
José Antonio Álvarez Ocete
Francisco Javier Sáez Maldonado

Credits: based on https: // www.kaggle.com/crawford/principle-component-analysis-gene-expression/notebook

PARTE 1: PCA con los datos de genes de (Golub et al.)

https://www.kaggle.com/crawford/principle-component-analysis-gene-expression/

Datos usados para clasificar pacientes con acute myeloid leukemia (AML) and acute lymphoblastic leukemia (ALL).

Golub et al "Molecular Classification of Cancer: Class Discovery and Class Prediction by Gene Expression Monitoring"

There are two datasets containing the initial (training, 38 samples) and independent (test, 34 samples) datasets used in the paper. These datasets contain measurements corresponding to ALL and AML samples from Bone Marrow and Peripheral Blood. Intensity values have been re-scaled such that overall intensities for each chip are equivalent.

Analysis steps

  1. Remove columns that contain "Call" data
  2. Transpose the dataframe so that each row is a patient and each column is a gene
  3. Remove gene description header and set the gene accession numbers as the column headers
  4. Split into train/test sets
  5. Scale values to zero mean and unit varaince
  6. PCA analysis
  7. To do: K-means cluster

(1) Load data

Exploratory data analysis

Realiza un análisis exploratorio de los datos (correlaciones entre sí y con las clases, distribuciones,...). Usa las técnicas y gráficos que te parezcan más representativos.

Podemos comenzar mirando qué clases tenemos y la distribución que tienen las mismas

Como podemos observar, hay más pacientes padecen ALL que pacientes que padecen AML en nuestro dataset (la proporción orbita entorno a $\frac{2}{3}:\frac{1}{3}$ respectivamente). A continuación, de cara a estudiar si existen correlaciones entre las distintas variables podemos representar un heatmap de estas correlaciones. Puesto que tenemos más de $7000$ variables, presentamos únicamente las $50$ primeras.

Se puede apreciar en el gráfico anterior que encontramos correlaciones de hasta $0.3$, y correlaciones negativas de casi $-0.6$. Debido a la alta dimensionalidad de los datos es díficil hacerse a la idea de las correlaciones realmente presentes en el dataset, aunque esta representación nos indica que son no triviales.

A continuación estudiamos cómo se distribuyen las dos clases en cada variable individualmente. Para ello pintamos boxplots de las primeras $50$ variables utilizando seaborn.

Podemos apreciar como las clases no son claramente separables en ninguna variable, siendo especialmente relevantes las últimas tres en las que estamos relativamente cercanos a este hecho, pero aún así una cantidad no trivial de datos (entre el $25$ y el $50\%$) se solapan a simple vista. Era de esperar que ante un problema tan complejo no pudiesemos distinguir las clases utilizando unicamente una variable.

De nuevo, este análisis no es definitivo pues hemos estudiando solo las primeras $50$ variables. Pasemos a estudiar cómo afectan los algoritmos de PCA y LDA a nuestro dataset.

(2) Principle Component Analysis

The analysis reveals that 21 principle components are needed to account for 80% of the variance. PC 1-3 add up to about ~33% and the rest is a slow burn where each component after PC8 contributes between 1-2% of the variance up until PC38 which is essentially zero. 1% is a decent amonut of variance and so the number of important PCs is up for interpretation.

Pregunta (1): ¿Qué pauta puede observarse en los valores de var_exp? ¿Cuál es la interpretación relativa de esos valores?

Se puede observar que a medida que avanzamos en el número de componente, el porcentaje de la varianza que explica esta componente disminuye. Esto tiene sentido, pues son las primeras componentes de las componentes principales las que son capaces de explicar la mayor variabilidad de los datos.

La variabilidad acumulada explicada, aún así, sigue aumentando cuando vamos avanzando en el número de componente, pues aunque la cantidad de varianza explicada sea mucho menor que en las componentes iniciales, sigue sin ser cero (a partir de la décima componente, todas explican menos de un $3\%$ de la varianza total, pero todas se mantienen por encima del $1\%$.

Recordamos también que el máximo número de componentes principales que podríamos tomar es igual al mínimo entre el número de características de un elemento del conjunto de datos de entrenamiento y el número de datos que tenemos en el conjunto de train, en este caso $38$, y conseguiríamos explicar así toda la varianza del conjunto.

(3) Projection of first three components

Las tres primeras componentes solamente explica un $33\%$ de la varianza, pero vamos a obtener una representación visual de la proyección a estas tres primeras componentes.

Pregunta(2): Modificando la perspectiva de la figura con el ratón, ¿qué observas en cuanto a la separabilidad de las clases? Adjunta una imagen que apoye tus conclusiones.

Realizamos dos perspectivas de los datos que nos pueden dar una idea intuitiva de lo que las tres primeras componentes principales nos dicen sobre los daots.

Si giramos la figura del siguiente modo y trazamos una línea negra que representa un posible hiperplano de separación obtenemos:

Perspectiva 1

Vemos como parece que los puntos de la clase roja AML parecen estar más a la izquierda y por encima que los de la clase azul ALL.

Girando más la perspectiva, de forma que la clase roja quede a la derecha, vuelve a parecer que hay un grado alto de separabilidad en nuestros datos.

Perspectiva 2

Parte 2: Linear Discriminant Analysis

Realizar un análisis similar usando LDA, usando en este caso la información sobre el tipo de cancer de cada paciente.

Dibujamos primero un gráfico para observar el resultado de la proyección a $1$ dimensión usando LDA.

Como podemos comprobar, tras proyectar los datos usando linear discriminant analysis, obtenemos que los elementos de las clases son prácticamente linealmente separables, considerando que puede haber datos que sean ruido (algunos elementos de la clase $0$ se clasificarían como los de la clase $1$).

Parte 3: Clustering

Utiliza k-means clustering con los datos originales y con los datos proyectados con PCA y LDA. ¿Qué observas?

Recordamos que, hasta este punto, tenemos:

Usualmente, Kmeans es un algoritmo de clustering, no de clasificación. Sin embargo, en este caso podemos tratar de enfocar el problema de la siguiente manera:

  1. Realizamos KMeans usando $k = 2$, que es el número de clases.
  2. Vemos si el algoritmo con dos medias es capaz de agrupar en el mismo cluster a los elementos de la misma clase.

Pasamos a realizar el análisis usando KMeans.

Recordamos también que este modelo tiene como función de pérdida la inertia o suma de las distancias entre los elementos del mismo cluster, que puede expresarse como

$$ \sum_{i=0}^{n}\min_{\mu_j \in C}||x_i - \mu_j||^2. $$

Hay que tener en cuenta que es una métrica no normalizada, que nos indica cómo de coherentes son los clusters que se han creado.

Tenemos que buscar también métrica de evaluación. Claramente podemos usar esta inertia como una de estas métricas, pero nos interesa buscar alguna más. En este caso, sabemos las clases originales que tienen las muestras, por lo que podemos buscar una métrica de external-cluster validation. Nos interesa una que evalúe las muestras dos a dos, así que usaremos el Rand Index, en concreto, el adjusted Rand Index. En general, esta es una medida de cuánto se parecen dos conjuntos de clusters sobre un mismo dataset. En nuestro caso, compararemos el clustering generado por KMeans con el 'clustering' generado al asociar a cada elemento, su clase. Si estos dos conjuntos de clusters son parecidos, habremos obtenido una buena distribución.

Formulemos primero el modelo no ajustado y luego lo ajustaremos. Sea $C$ el conjunto de clustering heredado de las clases del problema y $K$ el clustering definido sobre los datos. Definimos

Si $C_2^{n_\text{samples}}$ es el número total de posibles parejas del conjunto de datos, el unadjusted Rand index se define entonces como:

$$ RI = \frac{a + b}{C_2^{n_\text{samples}}}. $$

Sin embargo, para garantizar que asignar etiquetas aleatorias a los puntos nos dé un $RI$ cercano a cero, tenemos que ajustar este coeficiente definiendo el adjusted Rand index como sigue:

$$ ARI = \frac{RI - \mathbb E[RI]}{max(RI) - \mathbb E [RI]} $$

Este coeficiente es simétrico y está en el intervalo $[-1,1]$, siendo mejor el clústering cuando este coeficiente se acerca a $1$ y peor cuando se aleja de este.

Recordamos que en estas métricas, lo que queremos es minimizar la inertia, y maximizar el ARI.

Original data

Creamos primero una función que ajuste $k = 2$ medias usando el conjunto de datos y nos devuelva las etiquetas predichas para ambos conjuntos de train y test.

ANÁLISIS

KMeans y PCA

Ahora, queremos aplicar primero PCA para después hacer $k=2$ clústers y ver cómo de bien se agrupan nuestros datos. En principio, hemos dicho que con $n=21$ variables explicamos una gran parte de la varianza de nuestro conjunto de datos, por lo que comenzaremos haciendo PCA y quedándonos con las primeras $21$ variables para ver el resultado.

Vemos que usando $n=21$ componentes obtenemos un ligero descenso en la métrica de inertia, lo cual es positivo. Sin embargo, la métrica ARI desciende en ambos conjuntos. Como la métrica ARI es bastante relevante pues, de algún modo, nos mide el accuracy que tienen nuestros clústers, deberíamos comenzar quedándonos con realizar los clústers con el conjunto de datos original.

A continuación, realizaremos un análisis más exhaustivo de cómo varían las métricas según el número de componentes que tomemos para PCA.

Se puede observar cómo para cualquier número de componentes, el ARI en el conjunto de entrenamiento oscila en el interalo $[0.07, 0.20]$, alcanzando su máximo en $n=19$ componentes principales. En este punto se alcanza también un máximo en el gráfico de las inertias, que recordamos que queríamos minimizar, por lo que no consideramos $n=19$ componentes principales como un buen número de componentes para realizar nuestro análisis.

Sin embargo, observando la línea verde, vemos como con $n=3$ componentes principales obtenemos un mínimo local cercano al mínimo global de la función de inertias, obteniendo también un máximo global (sin considerar el punto $n=19$) de la función ARI en el conjunto de train, por lo que posiblemente quedarnos con $n=3$ componentes principales sería más adecuado.

Para hacernos una idea geométrica del resultado tras aplicar KMeans y PCA, dibujémos las tres primeras componentes principales de los puntos, así como los centros de los clusters y las debidas clasificaciones.

Se puede observar como tenemos puntos de la clase cero (circulares) que quedan a ambos lados del centro del clúster más cercano, por lo que todos ellos están mal clasificados. Sin embargo, los de la clase 1 quedan también en su mayoría más cercanos a este mismo centro, por lo que quedan todos bien clasificados salvo 1 (en verde), que está más alejado.

LDA Kmeans

Realizamos un proceso análogo de KMeans sobre los resultados obtenidos con LDA.

Podemos apreciar un enorme descenso en el valor de inertia, y un aumento notable en ambos valores de ARI. Esto revela una notable mejoría en el clustering realizado respecto a utilizar PCA. De nuevo, realizamos una representación gráfica de los resultados para obtener una idea intuitiva de las separaciones obtenidas, añadiendo una línea de separación negra en el punto donde partimos nuestra clasificación entre ALL y AML.

Podemos apreciar una notable mejoría en la separación realizadas en train, donde la mayoría de elementos están asociados al cluster con su clase. Es por ello que obtenemos un valor tan elevado en el ARI de training. Sin embargo, estos resultados no se traducen en una clara mejoría en test: el modelo no generelizada bien.

Como conclusión final podemos asegurar que ni PCA ni LDA nos permiten generalizar bien a partir del dataset de training, vista la enorme diferencia del ARI entre training y test en ambos casos. Esto puede deberse al bajo número de muestras en nuestro conjunto de datos. Sin embargo, utilizar LDA ha garantizado resultados notablemente mejores tanto en training como test.